﻿/*
功能: 根据角色id得到这个角色的所有级别,
序列化以后放到一个id属必为dataPool
的textarea中
*/
function getRoleLevels(roleId) {
    var result = new Object();
    var data = new Object();
    var url = "/User/GetRoleLevels";
    data.roleId = roleId;
    jQuery.ajax({
        url: url,
        async: false,
        data: data,
        type: "POST",
        dataType: "json",
        success: function (data) {
            //将得到该角色的所有级别,放在一个id为dataPool的隐藏域中
            jQuery("#dataPool").html(SerializeObject(data.DataList));
        },
        error: function () {
            alert("[系统提示:]\n\t获得角色级别时出错!");
        }
    });
    return result;
}
/*
功能: 收集表单数据,封装在一个json对象中,
最后返回一个json对象
*/
function collectData() {
    var data = new Object();
    data.Id = jQuery("#roleId").val();
    data.Code = jQuery("#Code").val();
    data.Name = jQuery("#Name").val();
    data.Seq = jQuery("#Seq").val();
    return data;
}
/*
功能: 添加或修改一个角色
根据隐藏域  <input type="hidden" id="roleId"/>
的值来确定是修改还是添加
*/
function SaveRole() {
    var isAdd;
    if (jQuery("#roleId").val() > 0) {
        //alert(">0");
        isAdd = false;
    }
    else {
        //alert("<0");
        isAdd = true;
    }
    var url = "";
    if (isAdd) {
        url = "/Role/AddRole";
    }
    else {
        url = "/Role/EditRole";
    }
    var data = collectData();
    jQuery.ajax({
        url: url,
        type: "POST",
        data: data,
        dataType: "json",
        cache: false,
        success: function (result) {
            setId(-100);
            if (result.errors.length > 0) {
                alert("[系统提示:]\n\t" + data.errors);
            }
            else if (result.isSuccess > 0) {
                alert("[系统提示:]\n\t" + "操作成功!");
            }
            else {
                alert("[系统提示:]\n\t" + "操作失败!");
            }
            reset(); //重置表单
            window.location.href = "/Role/ViewManageRole?" + Math.random();
        },
        error: function () {
            alert("[系统提示:]\n\t" + "操作失败!");
        }
    });
}
/*
功能:修改隐藏域 <input type="hidden" id="roleId"/>
的value属性值
*/
function setId(v) {
    jQuery("#roleId").val(v);
}
/*
功能:根据角色id,得到一个角色实体,
将角色的属性值放到对应的表单中;
*/
function bindData(id) {
    jQuery.ajax({
        url: "/Role/GetRole/" + id,
        type: "post",
        dataType: "json",
        success: function (data) {
            jQuery("#roleId").val(id);
            jQuery("#CancelEditBtn").removeAttr("disabled");
            jQuery("#Code").val(data.model.Code);
            jQuery("#Name").val(data.model.Name);
            jQuery("#Seq").val(data.model.Seq);
        }
    });
}
/*
功能: 当点击取消按钮时,所做的一系列操作
*/
function reset() {
    //step 1 修改隐藏域的值为负数
    setId(-100);
    //step 2 表单数据清空
    jQuery("#Code").val("");
    jQuery("#Name").val("");
    jQuery("#Seq").val("");
    //step 3 把取消按钮禁用
    jQuery("#CancelEditBtn").attr("disabled", "disabled");
}

/*
功能: 给一个角色设置级别时,列出所有角色,如果该角色已关
        联了某些级别,则自动勾选;
*/
function getUserLevel(roleId) {
    setId(roleId);
    //step 1: 得到该角色的所有等级

    //step 2: 列出所有级别,供用户选择
    jQuery.ajax({
        url: "/UserLevel/GetUserLevels",
        type: "post",
        data: {},
        dataType: "json",
        cache: false,
        success: function (data) {
            jQuery("#userLevelList").fadeOut();

            //调用此函数,得到该角色的所有级别,放在一个id为dataPool的textarea中
            getRoleLevels(roleId);
            var json = jQuery("#dataPool").html();
            //alert(json);
            //反序列化当前角色所关联的等级
            var obj = eval(json);

            var userLevelContainer = jQuery("#userLevelContainer");
            for (var i in data) {
                var checked = " ";
                
                for (var j in obj) {
                    if (obj[j].Id == data[i].Id) {
                        checked = "   checked='checked' ";
                        break;
                    }
                    else {
                        checked = "";
                    }
                }
                userLevelContainer.append("<span><input type='checkbox' " + checked + "  name='userLevel' value='" + data[i].Id + "'/>" + data[i].LevelName + "</span>");
            }
            userLevelContainer.append("<input type='button' value='分配等级' onclick='relateUserLevel()'/>");
            userLevelContainer.append("<input type='button' value='  取   消  ' onclick='cancelRelateUserLevel()'/>");
        },
        error: function () {
            alert("[系统提示:]\n\t获得等级列表失败!");
        }
    });
}
/*
功能: 将指定的角色和用户选择的等级建立关联
*/
function relateUserLevel() {
    var userLevels = document.getElementsByName("userLevel");
    var userLevelIds = new Array();
    for (var i = 0; i < userLevels.length; i++) {
        if (userLevels.item(i).checked) {
            userLevelIds.push(userLevels.item(i).value);
        }
    }
    var data = new Object();
    data.userLevelIds = userLevelIds.toString();
    data.roleId = jQuery("#roleId").val();
    if (userLevelIds.length == 0) {
        alert("[系统提示:]\n\t请勾选等级项!");
        return;
    }
    else {
        jQuery.ajax({
            url: "/Role/RelateUserLevel",
            type: "post",
            data: data,
            dataType: "json",
            cache: false,
            success: function (data) {
                if (data.isSuccess > 0) {
                    alert("[系统提示:]\n\t角色分配等级成功!" + data.errors);
                }
                else {
                    alert("[系统提示:]\n\t" + data.errors);
                }
            },
            errors: function () {

            }
        });
    }
}
/*
   功能: 取消给该角色分配等级,主要做 ____件事
   1.把 id 为 dataPool 的textarea清空;
   2.清空
*/
function cancelRelateUserLevel() {
    jQuery("#dataPool").html("");
    setId("-100");
    jQuery("#userLevelList").fadeIn();
    jQuery("#userLevelContainer").empty();
    window.location.href = "/Role/ViewManageRole?" + Math.random();
}